#ifndef PID_H
#define PID_H







typedef struct
{
    float P;
    float I;
    float D;
    float error; 
    float error_last;
    float error_last2;
    float error_sum;
    float outvalue; //输出值
}pid_struct;

/// @brief 动态创建pid_struct,并初始化
/// @param P 
/// @param I 
/// @param D 
/// @return 
pid_struct *pid_init(float P,float I,float D);

/// @brief 静态初始化pid_struct
/// @param pid pid_struct指针
/// @param P 
/// @param I 
/// @param D 
/// @return 
int pid_init(pid_struct *pid,float P,float I,float D);

/// @brief 位置式PID控制
/// @param targetvalue 目标值
/// @param feedback 反馈值
/// @param pid pid_struct指针 
/// @return 输出值
float pid_position_ctrl(float targetvalue,float feedback,pid_struct *pid);

/// @brief 增量式PID控制
/// @param targetvalue 目标值
/// @param feedback 反馈值
/// @param pid pid_struct指针
/// @return 输出值
float pid_increment_ctrl(float targetvalue,float feedback,pid_struct *pid);

#endif